/*
 * @lc app=leetcode.cn id=821 lang=java
 *
 * [821] 字符的最短距离
 *
 * https://leetcode-cn.com/problems/shortest-distance-to-a-character/description/
 *
 * algorithms
 * Easy (65.68%)
 * Likes:    92
 * Dislikes: 0
 * Total Accepted:    9.2K
 * Total Submissions: 13.9K
 * Testcase Example:  '"loveleetcode"\n"e"'
 *
 * 给定一个字符串 S 和一个字符 C。返回一个代表字符串 S 中每个字符到字符串 S 中的字符 C 的最短距离的数组。
 *
 * 示例 1:
 *
 *
 * 输入: S = "loveleetcode", C = 'e'
 * 输出: [3, 2, 1, 0, 1, 0, 0, 1, 2, 2, 1, 0]
 *
 *
 * 说明:
 *
 *
 * 字符串 S 的长度范围为 [1, 10000]。
 * C 是一个单字符，且保证是字符串 S 里的字符。
 * S 和 C 中的所有字母均为小写字母。
 *
 *
 */

// @lc code=start
class Solution {
    public int[] shortestToChar(String S, char C) {
        int[] res = new int[S.length()];
        int last = -1;
        int next = S.indexOf(C, last +1);
        for(int i=0; i < res.length; i++) {
            if(i >= next && next != -1) {
                last = next;
                next = S.indexOf(C, last+1);
            }
            if(last == -1) {
                res[i] = next - i;
                continue;
            }
            if(next == -1) {
                res[i] = i - last;
                continue;
            }
            res[i] = i - last > next - i ? next - i : i - last;
        }
        return res;
    }
}
// @lc code=end

